var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var url=require('url');


//设置session保存在redis
var session = require('express-session');
var RedisStore = require('connect-redis')(session);   //设置session保存在redis

//设置session保存在内存
/*var session = require('express-session');*/



var api = require('./routes/api');
var index = require('./routes/index');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');
app.engine('.html', require('ejs').__express);

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));


//设置跨域访问
app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    next();
});


//设置session保存在redis
app.use(session({
    store: new RedisStore({
        host: "localhost",
        port: 6379,
        db: "0",
        //pass:'123456'
    }),
    resave:false,     //resave：是指每次请求都重新设置session cookie，假设你的cookie是6000毫秒过期，每次请求都会再设置6000毫秒。
    saveUninitialized:true,  //saveUninitialized： 是指无论有没有session cookie，每次请求都设置个session cookie ，默认给个标示为 connect.sid。
    secret: 'keyboard cat',  //secret：用来对session数据进行加密的字符串.这个属性值为必须指定的属性。
    cookie: {maxAge: 1000*60*60}   //maxAge：cookie过期时间，毫秒。
}))

//设置session保存在内存
/*app.use(session({
    secret: 'session12345',  //secret：用来对session数据进行加密的字符串.这个属性值为必须指定的属性。
    //name: 'name',   //name：表示cookie的name，默认cookie的name是：connect.sid。
    cookie: {maxAge: 1000*60*60},   //maxAge：cookie过期时间，毫秒。
    resave: false,   //resave：是指每次请求都重新设置session cookie，假设你的cookie是6000毫秒过期，每次请求都会再设置6000毫秒。
    saveUninitialized: true,  //saveUninitialized： 是指无论有没有session cookie，每次请求都设置个session cookie ，默认给个标示为 connect.sid。
}));*/



app.use('*', function(req, res, next) {
    var urlReq=req.baseUrl;
    var urlStr=urlReq.substr(1,3);
    if(urlStr=='api'){
        next();
    }else{
        res.render('index');
    }
});


app.use('/api', api);
app.use('/api/index', index);


// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});


module.exports = app;
